import { ArgumentMetadata, HttpException, HttpStatus, Injectable, PipeTransform } from '@nestjs/common';
import { plainToInstance } from 'class-transformer';
import { validate } from 'class-validator';
@Injectable()
export class PipelinePipe implements PipeTransform {
  async transform(value: any, metadata: ArgumentMetadata) {

    // value 就是请求的参数, metadata 就是参数的元信息
    // 这里可以对参数进行处理, 比如校验, 转换等，不合格返回 400 错误
    // 安装验证器 npm i class-validator class-transformer， 验证dto中的字段
    // 这里实例化验证器
    const DTO = plainToInstance(metadata.metatype, value);   // 这样就可以做一个反射
    const errors = await validate(DTO);
    if (errors.length > 0) {
      throw new HttpException(errors, HttpStatus.BAD_REQUEST);          // 这里的异常信息可以做处理，根据前端想要的格式返回
    }

    return value;
  }
}
